#define  _CRT_SECURE_NO_WARNINGS
// class Solution {
//     bool checkCen(vector<vector<char>>& b, int r, int c)
//     {
//         static int dx[9] = {-1,0,1,-1,1,-1,0,1};
//         static int dy[9] = {-1,-1,-1,0,0,1,1,1};
//         int arr[10] = {0};
//         for (int i = 0; i < 9; i++)
//         {
//             int x = r + dx[i];
//             int y = c + dy[i];
//             if(b[x][y] == '.') continue;
//             if(arr[b[x][y] - '0']) return false;
//             arr[b[x][y] - '0'] = 1;
//         }
//         return true;
//     }

//     bool checkRow(vector<vector<char>>& b, int r)
//     {
//         int arr[10] = {0};
//         for (int i = 0; i < 9; i++)
//         {
//             if(b[r][i] == '.') continue;
//             if(arr[b[r][i] - '0']) return false;
//             arr[b[r][i] - '0'] = 1;
//         }
//         return true;
//     }

//     bool checkCol(vector<vector<char>>& b, int c)
//     {
//         int arr[10] = {0};
//         for (int i = 0; i < 9; i++)
//         {
//             if(b[i][c] == '.') continue;
//             if(arr[b[i][c] - '0']) return false;
//             arr[b[i][c] - '0'] = 1;
//         }
//         return true;
//     }

// public:
//     bool isValidSudoku(vector<vector<char>>& board) {
//         for (int i = 1; i < 9; i += 3)
//         {
//             for (int j = 1; j < 9; j += 3)
//             {
//                 if(!checkCen(board, i, j)) return false;
//             }
//         }
//         for (int i = 0; i < 9; i++)
//             if(!checkRow(board, i)) return false;
//         for (int i = 0; i < 9; i++)
//             if(!checkCol(board, i)) return false;

//         return true;
//     }
// };
class Solution {
    int row[9][10];
    int col[9][10];
    int center[3][3][10];

public:
    bool isValidSudoku(vector<vector<char>>& board) {
        for (int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 9; j++)
            {
                if (board[i][j] == '.') continue;
                int cur = board[i][j] - '0';
                if (row[i][cur] || col[j][cur] || center[i / 3][j / 3][cur]) return false;
                row[i][cur] = col[j][cur] = center[i / 3][j / 3][cur] = true;
            }
        }
        return true;
    }
};